package threading;

/**
 * 多线程中 start 和 run 的区别 ( 经典的面试题 )
 * Date: 2022-09-11
 * Time: 0:53
 */

class MyThread2 extends Thread {
    @Override
    public void run() {
        //循环1
        while(true) {
            System.out.println("hello thread");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class TestDemo9 {
    public static void main(String[] args) {
        MyThread2 thread = new MyThread2();
        thread.start(); // 这是继承 Thread 创建多线程的正常写法. 这是创建了一个新的线程通过start方法调用run方法
        //thread.run(); // 这种写法并没有创建新线程, 是在原来的线程(此处是main线程)里直接调用 run 方法.

        //因此, thread.start(); 写法执行的结果 是两个线程并发执行, 两个循环交替输出结果
        //thread.run(); 写法只有一个进程, 两个循环 "串行执行", 只会是 run 方法里的循环输出结果!!

        //循环2
        while(true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
